package com.java.proxy.simple;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Method;

/**
 * Java编译器编译好Java文件之后，产生.class 文件在磁盘中。这种class文件是二进制文件，<br/>
 * 内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件，取出二进制数据，加载到内存中，<br/>
 * 解析.class 文件内的信息，生成对应的 Class对象:
 * 
 * @author 我们手动加载.class字节码文件到程序中加载成实例对象
 *
 */
public class SimpleClass {

	public static void main(String[] args) {

		File file = new File("D:/EclipseWork/javabase/target/classes/com/java/proxy/simple/Obj.class");
		try {
			InputStream is = new FileInputStream(file);
			byte[] result = new byte[1024];
			int count = is.read(result);
			MyClassLoader mcl = new MyClassLoader();
			Class<?> clazz = mcl.defineMyClass(null, result, 0, count);
			Method[] methdos = clazz.getMethods();
			for (Method method : methdos) {
				if (method.getName().equals("printName")) {
					Object o = clazz.newInstance();
					method.invoke(o, "asdas");
				}
			}
			System.out.println(clazz.getName());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
